package com;

/**
 * 程序 : 一堆命令的集合,是指保存在硬盘中的可执行文件,是个静态概念
 * 
 * 进程 : 程序被加载进内存,准备执行或正在执行,就是一个进程
 * 
 * 线程 : 程序中不同的执行路径/分支
 * 
 * 1.进程介绍:
 * 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元。在操作系统中每启动一个应用程序就会启动一个进程与之相对应。不同进程之间的内存是独立的，不共享内存。
 * 多进程引入的优点 
 * 单个进程独占高速CPU造成CPU空闲时间太多、使用率低。引入多进程则在不同进程之间并发共享高速CPU，使CPU空闲时间减少，提高CPU使用效率。
 * 
 * 2. 线程介绍 线程也称轻量级进程，是程序执行的最小单元。一个进程可以启动多个线程。不同线程堆内存和方法区内存共享，栈内存独立，一个线程一个栈。
 * 多线程引入的优点  提高进程的执行效率
 * 
 * 【思考】  程序中main方法结束，程序就结束了吗？ 
 * 答：main方法结束程序不一定结束了。main方法结束主线程结束。有可能其他的分支线程还在运行。分支线程和主线程没有主次高低之分，只不过分支线程是由主线程分发的。
 * 
 * 3. 进程与线程的区别 进程有独立的代码和数据空间，进程间切换成本开销大。
 * 同一进程的多个线程间共享进程代码和数据空间，仅保留独立的线程栈、程序计数器，切换成本小。 多进程是操作系统中可见的并行运行的多个独立任务。
 * 多线程是同一进程内不同的多个并行执行程序。
 * 
 * 创建线程的第一种方式 :
 * 
 * 第一步 继承 java.lang.Thread类
 * 
 * 第二步 重写run()方法,run()方法就相当于新线程中的 main 方法,是程序的入口
 * 
 * 第三步启动调用Thread 的start 方法
 * 
 * 创建线程的第二种方法 :
 * 
 * 第一步 实现 java.lang.Runnable接口
 * 
 * 第二步 实现 run 方法
 * 
 * 第三布 调用 start();
 * 
 * 创建线程有两种方式,但是启动线程只有一种方式,就是调用Thread 的start 方法
 * 
 * 
 * @author lenovo
 * @date 2020年7月23日
 */
public class Thread_01_Create {

	public static void main(String[] args) {
		// 创建线程对象(继承)
		Thread thread = new Processor();

		// 创建线程对象(实现)
		Thread thread2 = new Thread(new Processor1());

		// 启动线程
		thread.start();
		thread2.start();
		// 这种不是启动线程,只是调用方法而已
		// thread.run();
		for (int i = 0; i < 10; i++) {
			System.out.println("main线程 : " + i);
		}
	}

}

class Processor extends Thread {
	@Override
	public void run() {
		m1();
	}

	public void m1() {
		for (int i = 0; i < 10; i++) {
			System.out.println("继承 线程 : " + i);
		}
	}
}

class Processor1 implements Runnable {

	@Override
	public void run() {
		m1();
	}

	public void m1() {
		for (int i = 0; i < 10; i++) {
			System.out.println("实现 线程 : " + i);
		}
	}
}